前面使用的 dotnet run 命令,要了解底層原理,需要先看 dotnet/sdk原始碼的導覽,由「使用 CLI」過渡到「讀懂 CLI 與建置管線怎麼運作」。先釐清:dotnet 可執行檔本體位於 installer 與 runtime 相關倉庫的產物,但「指令的高階行為(如 build / run / publish / workload)」的大量邏輯集中在 dotnet/sdk。
| 角色 | Repository | 主要職責 | 與 sdk互動 | 
|---|---|---|---|
| 編譯器 | dotnet/roslyn | C# / VB 編譯、語意分析 | SDK 透過 MSBuild Task 呼叫 csc、生成 IL | 
| 執行時 | dotnet/runtime | BCL、CLR、JIT、ILLink、NativeAOT 工具 | SDK 把屬性傳遞給 crossgen2、ILLink、打包 host | 
| ASP.NET | dotnet/aspnetcore | Kestrel、Minimal APIs、Blazor 等 | SDK 引用其 targeting packs / runtime packs | 
| 安裝器 | dotnet/installer | 打包最終發行之 SDK / Runtime | SDK 產生的組件被彙整打包 | 
| 模板 | dotnet/templating | dotnet new模板系統 | SDK 內夾帶或參考模板資源 | 
| SDK | dotnet/sdk | CLI 指令高階流程、MSBuild Targets、工作負載、打包組態 | 本章主角 | 
換句話說:sdk 是把「語言、執行時、生態功能」接起來的膠水層。